function Type3FontInfo(pdDoc, imgPath){
	this.firstChar = null;
	this.lastChar = null;
	this.charsWidth = [];
	this.BBox = [4];
	this.fontMatrix = new PDMatrix();
	
	this.m_typeFlag = [];
	this.m_forms = [];
	this.m_imgs = [];
	this.m_pdDoc = pdDoc;
	this.m_imgPath = imgPath;
}

Type3FontInfo.prototype.parseJson = function (arrayData) {
    if (arrayData.length == 0) return;
    //var type3Info = this;
    this.firstChar = arrayData[0];
    this.lastChar = arrayData[1];
    this.charsWidth = arrayData[2];
    this.BBox = stringArr2NumArr(arrayData[3]);
    var tempArr = stringArr2NumArr(arrayData[4]); 
    this.fontMatrix.Set(tempArr[0],tempArr[1],tempArr[2],tempArr[3],tempArr[4],tempArr[5]);
};

Type3FontInfo.prototype.ParseFromBin = function (rd) {

    this.firstChar = rd.readUint32();
    this.lastChar = rd.readUint32();

    var nCount = rd.readUint32();
    for (var i = 0; i < nCount; i++) {
        this.charsWidth[i] = rd.readInt32();
    }

    var left = rd.readInt32();
    var top = rd.readInt32();
    var right = rd.readInt32();
    var bottom = rd.readInt32();
    this.BBox = [left, top, right, bottom];

    var a = rd.readFloat32(),
	    b = rd.readFloat32(),
	    c = rd.readFloat32(),
	    d = rd.readFloat32(),
	    e = rd.readFloat32(),
	    f = rd.readFloat32();
    this.fontMatrix.Set(a, b, c, d, e, f);


    for (var j = 0; j < nCount; j++) {
        var type = rd.readByte();
        this.m_typeFlag[j] = type;
        if (type == 0) {
            var form = new PDForm(this.m_pdDoc, this.m_imgPath);
            form.ParseFromBin(rd);
            this.m_forms[j] = form;
            this.m_imgs[j] = "";
        } else if (type == 1) {
            var img = rd.readString(64);
            this.m_imgs[j] = img;
            this.m_forms[j] = null;
        }
    }

};